/**
 * 
 */
package fr.gfi.agraf.utils;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;

/**
 * Est configurée pour une adresse gmail
 * 
 * @author Fw
 * 
 */
public class MailUtils {

//	final private static String ADRESSE_EXPEDITEUR = "projet.gestion.raf@gmail.com";
//	final private static String MDP_EXPEDITEUR = "gfisararaf";
	// TODO : Externalisation
	final private static String ADRESSE_EXPEDITEUR = "sara-lille-dev@gfi.fr";
	final private static String MDP_EXPEDITEUR = "Saradev2013";
	
	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger.getLogger(MailUtils.class);

	/**
	 * Constructeur
	 */
	private MailUtils() {
		// Empty constructeur
	}


	/**
	 * Méthode permetant d'envoyer un email vers une adresse
	 * 
	 * @param adresseDestinataire
	 *            ex : test@gmail.com
	 * @param objetMail
	 *            L'objet qui apparaitra dans le mail envoyé
	 * @param messageAEnvoye
	 *            Le contenu de l'email
	 */
	public static void envoyerMail(final String adresseDestinataire, final String objetMail,
			final String messageAEnvoye) {
		try {
			final Properties props = getPropertiesServeurMail();
			final Message message = new MimeMessage(getSessionServeurMail(props));
			message.setFrom(new InternetAddress(ADRESSE_EXPEDITEUR));
			message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(adresseDestinataire));
			message.setSubject(objetMail);
			message.setText(messageAEnvoye);
			Transport.send(message);

		} catch (final MessagingException e) {
			LOGGER.error("Une erreur s'est produite lors de l'envoi du mail", e);
		}
	}

	/**
	 * Recupere les properties, configuré pour un serveur gmail. L'attribut
	 * "...ssl.trust" est un fix de l'erreur MessagingException
	 * 
	 * @return les properties
	 */
	private static Properties getPropertiesServeurMail() {
		final Properties props = new Properties();
		// TODO : Externalisation
//		props.put("mail.smtp.auth", "true");
//		props.put("mail.smtp.starttls.enable", "true");
//		props.put("mail.smtp.host", "smtp.gmail.com");
//		props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
//		props.put("mail.smtp.port", "587");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.host", "Smtp.gfi.fr");
		props.put("mail.smtp.port", "25");
		return props;
	}

	/**
	 * Renvoie la session pour se connecté sur le serveur mail
	 * 
	 * @param props
	 *            recupérées via la methode getPropertiesServeurMail() de cette
	 *            classe
	 * @return la session
	 */
	private static Session getSessionServeurMail(final Properties props) {
		final Session session = Session.getInstance(props, new javax.mail.Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(ADRESSE_EXPEDITEUR, MDP_EXPEDITEUR);
			}
		});

		return session;
	}

}
